Computing systems have become ubiquitous, ranging from small embedded devices to phones and tablets to PCs and backend servers. Each of these computing systems is designed to process software code. The software allows users to perform functions, interacting with the hardware provided by the computing system. In some cases, these computing systems allow users to establish and run virtual machines. These virtual machines may provide functionality not provided by the host operating system, or may comprise a different operating system altogether. In this manner, virtual machines may be used to extend the functionality of the computing system. Virtual machines may be backed up on virtual storage devices which themselves may be backed up to physical or virtual storage devices. Virtual machine hosts may also be configured to take snapshots which represent point-in-time images of the virtual machine. The VM snapshots or “checkpoints” include CPU state, memory state, storage state and other information necessary to completely recreate or restore the virtual machine to that point in time.